home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / CADAR / Symbols / Chords / hindemith-chord-mask < prev    next >
Lisp/Scheme  |  1998-10-22  |  4KB  |  96 lines

  1. hindemith-chord-mask chords mask 
  2. &key (type :rnd) (seed nil) (sub-groups '(0 0)))
  3.  
  4. type can be :rnd or :ord 
  5.  
  6. This function which is the latest in the cadar module
  7. and not quite finished analyses the chord-material
  8. and divides it into groups as stated in Hindemiths
  9. The craft of musical composition.
  10. The theory divides chords into subgroups after tension
  11. (or dissonans) amount.
  12. To main subgroups (A and B) where chords without tritone
  13. is A and chords with tritone is B.
  14. Then there are subgroups depending on what other intervals
  15. that are percent.
  16.  
  17. This function divides into this groups and reorder
  18. the material after the mask which uses the function
  19. change-order-mask which can use most kinds of material.
  20.  
  21. With type :rnd it picks randomly among the groups 
  22. matching the mask and with type :ord it picks in the
  23. original order of the chords. 
  24.  
  25. Sub-groups shifts what groups to pick within subgroups.
  26. '(0 0) selects all sub-groups '(1 0) skips first sub-group
  27. '(0 1) skips last sub-group '(2 2) skips first two and last two
  28. sub-groups . . .
  29. if no group matches returns nil.
  30.  
  31. seed works only with type :rnd and control the
  32. random-generator.  
  33.  
  34. To decide if chords are in root position which is needed
  35. for some of the groups the function get-chord-roots is used.
  36. get-chord-roots is also based on Hindemith theory and uses
  37. his series2 to make its choices.
  38. series2 says that the most dominant interval is the fifth.
  39. so if a fifth is percent it takes the lowest note of the
  40. fifth as root. if more than one fifth is percent it takes
  41. the lowest of them.
  42. next strongest interval is a fourth a if a fourth is percent
  43. then the top note is the root.
  44. then it keeps on thru the rest of the intervals.
  45.  
  46. So the idea with the function is to reorder chords after
  47. a mask to shape the tension which can be useful for randomly
  48. produced material.
  49. To get the best result a large amount of material is needed
  50. so that all the different groups will be represented.
  51. If only one or two groups is percent it can't make so many
  52. choices.
  53.  
  54.  
  55. If the chords don't fit after reordering you can always
  56. transpose chords without loosing the tension-curve.
  57.  
  58. The function works (for the moment) only with chromatic
  59. material and not with pauses or single notes but you can
  60. always use convert-to-chromatic to convert it and then
  61. with change-to-new-tonality convert it back again. 
  62.  
  63. A few examples:
  64.  
  65. (setq chords '(aeh adi ach acf aei aek adhj agk aegk aehkn aegl adg))
  66.  
  67. (setq chords2 (append chords (symbol-transpose 4 chords))) 
  68. ->(aeh adi ach acf aei aek adhj agk aegk aehkn aegl adg eil ehm egl egj eim eio ehln eko eiko eilor eikp ehk)
  69.  
  70. (setq mask (gen-noise-white 34 1.0 0.5))
  71. -> lots of numbers
  72.  
  73. (hindemith-chord-mask chords2 mask :seed 0.618)
  74. ->(egl aei adg adg eim adhj egl eiko aegl acf egj ehm ehln eio eko aegl aeh aek aeh aehkn aehkn agk aegk ehm)
  75.  
  76. (hindemith-chord-mask chords2 mask :type :ord)
  77. ->(egl eim ehk adg aei ehln ach eiko eikp egj acf ehm adhj eio eko aegl eil aek aeh eilor aehkn agk aegk adi)
  78.  
  79. (hindemith-chord-mask chords2 mask :seed 0.1 
  80. :sub-groups '(1 1))
  81. ->(egl aei adg adg aei ehln egl eiko aegl acf acf ehm ehln eio eko aegl ehm eio ehm aehkn aehkn eko eiko eio)
  82.  
  83. (hindemith-chord-mask chords2 mask :seed 0.1 
  84. :sub-groups '(2 2))
  85. ->(egl aei adg adg aei eko egl eiko aegl acf acf eio eko ehln eko aegl eio ehln eio aehkn aehkn eiko eiko ehln)
  86.  
  87. (hindemith-chord-mask chords2 mask :seed 0.1 
  88. :sub-groups '(3 3))
  89. ->(egj aei adg adg aei eiko egj egl aegl acf aehkn ehln eiko eko eiko aegl ehln eko ehln aehkn aehkn egl egl eko)
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.